/*
 * Auteur : Kevin BEUTIER, Maxime DESMAUTS, Pierre EVERS, Clément GUILLERMIN
 */

#include <iostream>
#include "grammaire/Nombre.h"
#include "grammaire/OperateurBinaire.h"
#include "TraitementChaine.h"
#include "grammaire/Expression.h"
#include "grammaire/AffecteVariable.h"
#include "grammaire/AfficheChaine.h"
#include "grammaire/DefinitionFonction.h"
#include "grammaire/DeclareVariable.h"
#include "grammaire/AppelFonction.h"
#include "grammaire/Repete.h"
#include "grammaire/Programme.h"
#include "ManipulationFichier.h"
#include "Parseur.h"
#include <sstream>
#include <fstream>
#include <stdlib.h>

int main(int argc, char **argv) {

	// Si on a 2 ou 3 arguments on génére le .cpp
	if(argc == 3 || argc==4){
		Parseur parseur(argv[1]);
		parseur.lireFichierLobo();

		Programme prog = parseur.getProgramme();
		prog.analyser();

		ManipulationFichier::exporterFichier(&prog, argv[2]);

		// Si on a 3 arguments alors on compile et execute le fichier.
		if(argc == 4){
			std::string fichier = argv[2];
			std::string executable = argv[3];

			ManipulationFichier::compiler(fichier , executable );

			ManipulationFichier::executer( executable );

		}

	}else{ // Si le nombre d'argument est incorrect.
		std::cout << argc << std::endl;
		std::cout << "Les paramètres sont incorectes : " << std::endl;
		std::cout << "- premier paramètre : Fichier lobo" << std::endl;
		std::cout << "- second paramètre : Fichier cpp généré" << std::endl;
		std::cout << "- troisième paramètre (Optionnel) : Fichier executable généré à partir du cpp." << std::endl << std::endl;
		std::cout << "Si trois paramètres sont donnés, le programme sera compilé puis exécuté." << std::endl;
		std::cout << std::endl << "Exemple ligne d'exécution" << std::endl;
		std::cout << "./project /home/etudiant/programme.lobo /home/etudiant/programme.cpp /home/etudiant/programme.out" << std::endl;

	}





	return 0;
}
